package com.itheima.zuoye.zy2;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchFieldException {
        Class<Person> clazz = Person.class;
        // 3. 通过 Class 获取有参构造方法（String, int）
        Constructor<?> constructor = clazz.getConstructor(String.class, int.class);

        // 4. 调用构造方法，创建 Person 对象
        Object personObj = constructor.newInstance("Alice", 20);

        // 5. 通过 Class 获取 setName 方法对象
        Method setNameMethod = clazz.getMethod("setName", String.class);

        // 6. 执行 setName 方法对象
        setNameMethod.invoke(personObj, "Bob");

        // 7. 通过 Class 获取 age 的 Field 对象
        Field ageField = clazz.getDeclaredField("age");

        // 8. 设置属性（age 是 private，需要 setAccessible(true)）
        ageField.setAccessible(true);
        ageField.setInt(personObj, 30);

        // 9. 打印验证
        System.out.println(personObj);
    }
}
